package com.zykj.template;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 00
 * @since 2019/1/3-11:00
 */
public abstract class CaffeineBeverage {

    //TODO *定义final 类型  可以防止之类修改该方法（行为 或者说 一组步骤），这样总的结果保持不变， 实现由之类控制
    //  模板方法模式：在一个方法上 定义算法的骨架， 而将这些步骤的实现延迟到子类中实现，使得之类在不改变算法结构的情况下，重新
    //                  重新定义某些算法的定义
    //  *1: 由之类决定如何实现算法中的步骤
    final void prepareRecipe() {
        //TODO 这里的步骤就相当于算法， 即相当于一个模板
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    abstract void brew();
    abstract void addCondiments();

    void boilWater() {
        System.out.println("煮沸开水...");
    }
    void pourInCup() {
        System.out.println("倒入杯中...");
    }
}
